use my_commons::my_pause;
use rust_test::common::*;
pub mod te_part0;
pub mod te_part1;
pub mod te_part2;
//use te_part0::{t0_0, t0_1};
use te_part1::{t1_0, t1_1, t1_2, t1_3};
use te_part2::{t2_0, t2_1, t2_2};

pub fn tt() -> Result<(), Box<dyn std::error::Error>> {
    // ==================
    my_sep();
    t1_0::tt1()?; // option 接口
    t1_0::tt2()?; // option 接口, 模式匹配
    t1_1::tt()?; // color 测试

    // my_pause();

    // ==================
    my_sep();
    t1_2::tt1()?; // deref 测试, String -> &str
    t1_2::tt2()?; // deref 测试, Box
    t1_2::tt3()?; // deref 测试, 连续 deref

    // ==================
    my_sep();
    t1_3::tt2(); // T = i32, 默认泛型参数
    t1_3::tt3(); // 脱离泛型上下文

    // ==================
    my_sep();
    t2_0::tt()?; // 正则表达式测试

    t2_1::tt()?; // trait 对象 测试
    t2_1::tt2(); // trait 对象的 vec
    t2_1::tt3(); // trait 包含泛型参数
    t2_1::tt4(); // trait of泛型的对象
    t2_1::tt5(); // 调用同名函数
    t2_1::tt6(); // trait 定义中的 trait 约束
    t2_1::tt7(); // 在外部类型上实现外部特征(newtype)

    // ==================
    t2_2::tt1(); //vector 测试
    t2_2::tt2(); //vector 借用数组元素
    t2_2::tt3(); //vector 迭代遍历
    t2_2::tt4(); //通过 枚举 存储不同类型的元素
    t2_2::tt5(); //通过 trait 对象 存储不同类型的元素
    t2_2::tt6(); //vector 预分配容量
    t2_2::tt7(); //vector 常用操作
    t2_2::tt8(); //vector 整数排序
    t2_2::tt9(); //vector 浮点数排序
    t2_2::tt10(); //vector, 对 struct 排序

    // ==================
    Ok(())
}
